home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 7_2009-2012.ISO / data / zips / Super_Anti2188999232010.psc / super anttivirus source code v3 / clsCRC32.cls < prev    next >
Text File  |  2010-09-14  |  13KB  |  393 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "clsCRC32"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. 'Credits goes to Noel A. Dacara
  15.  
  16. Option Explicit
  17.  
  18. Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  19. Private m_CRC32Asmbl() As Byte
  20. Private m_CRC32Table(0 To 255) As Long
  21.  
  22. Function StringChecksum(Str As String) As String
  23.     
  24.     If Not Len(Str) = 0 Then
  25.         StringChecksum = Hex$(CalculateBytes(StrConv(Str, _
  26.             vbFromUnicode)))
  27.     End If
  28.     
  29. End Function
  30.  
  31. Function FileChecksum(file As String) As String
  32.  
  33.     On Error Resume Next
  34.     Dim Arr() As Byte
  35.     Dim F As Integer
  36.     
  37.     F = FreeFile
  38.     
  39.     Open file For Binary Access Read As F
  40.         ReDim Arr(0 To LOF(F) - 1) As Byte
  41.         Get #F, , Arr()
  42.     Close #F
  43.     
  44.     FileChecksum = Hex$(CalculateBytes(Arr))
  45.     
  46. ErrHandle:
  47.  
  48. End Function
  49.  
  50. Private Function CalculateBytes(Arr() As Byte) As Long
  51.     
  52.     Dim CRC32 As Long
  53.     
  54.     CRC32 = &HFFFFFFFF
  55.     
  56.     On Local Error GoTo ErrHandle
  57.     
  58.     Dim I As Long
  59.     I = UBound(Arr) - LBound(Arr) + 1
  60.     Call CallWindowProc(VarPtr(m_CRC32Asmbl(0)), VarPtr(CRC32), VarPtr(Arr(LBound(Arr))), VarPtr(m_CRC32Table(0)), I)
  61.     
  62. ErrHandle:
  63.     CalculateBytes = (Not CRC32)
  64.     
  65. End Function
  66.  
  67. 'Class Procedures
  68. Private Sub Class_Initialize()
  69.     Dim I As Long
  70. '    Dim j As Long
  71.     
  72. '    Dim lCRC32 As Long
  73.     
  74. '    Const lXOR32 As Long = &HEDB88320
  75.     
  76. '    For i = 0 To 255
  77. '        lCRC32 = i
  78. '
  79. '        For j = 8 To 1 Step -1
  80. '            If (lCRC32 And 1) Then
  81. '                lCRC32 = ((lCRC32 And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
  82. '                lCRC32 = lCRC32 Xor lxor32
  83. '            Else
  84. '                lCRC32 = ((lCRC32 And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
  85. '            End If
  86. '        Next j
  87. '
  88. '        m_CRC32Table(i) = lCRC32
  89. '    Next i
  90.     
  91.     m_CRC32Table(0) = &H0
  92.     m_CRC32Table(1) = &H77073096
  93.     m_CRC32Table(2) = &HEE0E612C
  94.     m_CRC32Table(3) = &H990951BA
  95.     m_CRC32Table(4) = &H76DC419
  96.     m_CRC32Table(5) = &H706AF48F
  97.     m_CRC32Table(6) = &HE963A535
  98.     m_CRC32Table(7) = &H9E6495A3
  99.     m_CRC32Table(8) = &HEDB8832
  100.     m_CRC32Table(9) = &H79DCB8A4
  101.     m_CRC32Table(10) = &HE0D5E91E
  102.     m_CRC32Table(11) = &H97D2D988
  103.     m_CRC32Table(12) = &H9B64C2B
  104.     m_CRC32Table(13) = &H7EB17CBD
  105.     m_CRC32Table(14) = &HE7B82D07
  106.     m_CRC32Table(15) = &H90BF1D91
  107.     m_CRC32Table(16) = &H1DB71064
  108.     m_CRC32Table(17) = &H6AB020F2
  109.     m_CRC32Table(18) = &HF3B97148
  110.     m_CRC32Table(19) = &H84BE41DE
  111.     m_CRC32Table(20) = &H1ADAD47D
  112.     m_CRC32Table(21) = &H6DDDE4EB
  113.     m_CRC32Table(22) = &HF4D4B551
  114.     m_CRC32Table(23) = &H83D385C7
  115.     m_CRC32Table(24) = &H136C9856
  116.     m_CRC32Table(25) = &H646BA8C0
  117.     m_CRC32Table(26) = &HFD62F97A
  118.     m_CRC32Table(27) = &H8A65C9EC
  119.     m_CRC32Table(28) = &H14015C4F
  120.     m_CRC32Table(29) = &H63066CD9
  121.     m_CRC32Table(30) = &HFA0F3D63
  122.     m_CRC32Table(31) = &H8D080DF5
  123.     m_CRC32Table(32) = &H3B6E20C8
  124.     m_CRC32Table(33) = &H4C69105E
  125.     m_CRC32Table(34) = &HD56041E4
  126.     m_CRC32Table(35) = &HA2677172
  127.     m_CRC32Table(36) = &H3C03E4D1
  128.     m_CRC32Table(37) = &H4B04D447
  129.     m_CRC32Table(38) = &HD20D85FD
  130.     m_CRC32Table(39) = &HA50AB56B
  131.     m_CRC32Table(40) = &H35B5A8FA
  132.     m_CRC32Table(41) = &H42B2986C
  133.     m_CRC32Table(42) = &HDBBBC9D6
  134.     m_CRC32Table(43) = &HACBCF940
  135.     m_CRC32Table(44) = &H32D86CE3
  136.     m_CRC32Table(45) = &H45DF5C75
  137.     m_CRC32Table(46) = &HDCD60DCF
  138.     m_CRC32Table(47) = &HABD13D59
  139.     m_CRC32Table(48) = &H26D930AC
  140.     m_CRC32Table(49) = &H51DE003A
  141.     m_CRC32Table(50) = &HC8D75180
  142.     m_CRC32Table(51) = &HBFD06116
  143.     m_CRC32Table(52) = &H21B4F4B5
  144.     m_CRC32Table(53) = &H56B3C423
  145.     m_CRC32Table(54) = &HCFBA9599
  146.     m_CRC32Table(55) = &HB8BDA50F
  147.     m_CRC32Table(56) = &H2802B89E
  148.     m_CRC32Table(57) = &H5F058808
  149.     m_CRC32Table(58) = &HC60CD9B2
  150.     m_CRC32Table(59) = &HB10BE924
  151.     m_CRC32Table(60) = &H2F6F7C87
  152.     m_CRC32Table(61) = &H58684C11
  153.     m_CRC32Table(62) = &HC1611DAB
  154.     m_CRC32Table(63) = &HB6662D3D
  155.     m_CRC32Table(64) = &H76DC4190
  156.     m_CRC32Table(65) = &H1DB7106
  157.     m_CRC32Table(66) = &H98D220BC
  158.     m_CRC32Table(67) = &HEFD5102A
  159.     m_CRC32Table(68) = &H71B18589
  160.     m_CRC32Table(69) = &H6B6B51F
  161.     m_CRC32Table(70) = &H9FBFE4A5
  162.     m_CRC32Table(71) = &HE8B8D433
  163.     m_CRC32Table(72) = &H7807C9A2
  164.     m_CRC32Table(73) = &HF00F934
  165.     m_CRC32Table(74) = &H9609A88E
  166.     m_CRC32Table(75) = &HE10E9818
  167.     m_CRC32Table(76) = &H7F6A0DBB
  168.     m_CRC32Table(77) = &H86D3D2D
  169.     m_CRC32Table(78) = &H91646C97
  170.     m_CRC32Table(79) = &HE6635C01
  171.     m_CRC32Table(80) = &H6B6B51F4
  172.     m_CRC32Table(81) = &H1C6C6162
  173.     m_CRC32Table(82) = &H856530D8
  174.     m_CRC32Table(83) = &HF262004E
  175.     m_CRC32Table(84) = &H6C0695ED
  176.     m_CRC32Table(85) = &H1B01A57B
  177.     m_CRC32Table(86) = &H8208F4C1
  178.     m_CRC32Table(87) = &HF50FC457
  179.     m_CRC32Table(88) = &H65B0D9C6
  180.     m_CRC32Table(89) = &H12B7E950
  181.     m_CRC32Table(90) = &H8BBEB8EA
  182.     m_CRC32Table(91) = &HFCB9887C
  183.     m_CRC32Table(92) = &H62DD1DDF
  184.     m_CRC32Table(93) = &H15DA2D49
  185.     m_CRC32Table(94) = &H8CD37CF3
  186.     m_CRC32Table(95) = &HFBD44C65
  187.     m_CRC32Table(96) = &H4DB26158
  188.     m_CRC32Table(97) = &H3AB551CE
  189.     m_CRC32Table(98) = &HA3BC0074
  190.     m_CRC32Table(99) = &HD4BB30E2
  191.     m_CRC32Table(100) = &H4ADFA541
  192.     m_CRC32Table(101) = &H3DD895D7
  193.     m_CRC32Table(102) = &HA4D1C46D
  194.     m_CRC32Table(103) = &HD3D6F4FB
  195.     m_CRC32Table(104) = &H4369E96A
  196.     m_CRC32Table(105) = &H346ED9FC
  197.     m_CRC32Table(106) = &HAD678846
  198.     m_CRC32Table(107) = &HDA60B8D0
  199.     m_CRC32Table(108) = &H44042D73
  200.     m_CRC32Table(109) = &H33031DE5
  201.     m_CRC32Table(110) = &HAA0A4C5F
  202.     m_CRC32Table(111) = &HDD0D7CC9
  203.     m_CRC32Table(112) = &H5005713C
  204.     m_CRC32Table(113) = &H270241AA
  205.     m_CRC32Table(114) = &HBE0B1010
  206.     m_CRC32Table(115) = &HC90C2086
  207.     m_CRC32Table(116) = &H5768B525
  208.     m_CRC32Table(117) = &H206F85B3
  209.     m_CRC32Table(118) = &HB966D409
  210.     m_CRC32Table(119) = &HCE61E49F
  211.     m_CRC32Table(120) = &H5EDEF90E
  212.     m_CRC32Table(121) = &H29D9C998
  213.     m_CRC32Table(122) = &HB0D09822
  214.     m_CRC32Table(123) = &HC7D7A8B4
  215.     m_CRC32Table(124) = &H59B33D17
  216.     m_CRC32Table(125) = &H2EB40D81
  217.     m_CRC32Table(126) = &HB7BD5C3B
  218.     m_CRC32Table(127) = &HC0BA6CAD
  219.     m_CRC32Table(128) = &HEDB88320
  220.     m_CRC32Table(129) = &H9ABFB3B6
  221.     m_CRC32Table(130) = &H3B6E20C
  222.     m_CRC32Table(131) = &H74B1D29A
  223.     m_CRC32Table(132) = &HEAD54739
  224.     m_CRC32Table(133) = &H9DD277AF
  225.     m_CRC32Table(134) = &H4DB2615
  226.     m_CRC32Table(135) = &H73DC1683
  227.     m_CRC32Table(136) = &HE3630B12
  228.     m_CRC32Table(137) = &H94643B84
  229.     m_CRC32Table(138) = &HD6D6A3E
  230.     m_CRC32Table(139) = &H7A6A5AA8
  231.     m_CRC32Table(140) = &HE40ECF0B
  232.     m_CRC32Table(141) = &H9309FF9D
  233.     m_CRC32Table(142) = &HA00AE27
  234.     m_CRC32Table(143) = &H7D079EB1
  235.     m_CRC32Table(144) = &HF00F9344
  236.     m_CRC32Table(145) = &H8708A3D2
  237.     m_CRC32Table(146) = &H1E01F268
  238.     m_CRC32Table(147) = &H6906C2FE
  239.     m_CRC32Table(148) = &HF762575D
  240.     m_CRC32Table(149) = &H806567CB
  241.     m_CRC32Table(150) = &H196C3671
  242.     m_CRC32Table(151) = &H6E6B06E7
  243.     m_CRC32Table(152) = &HFED41B76
  244.     m_CRC32Table(153) = &H89D32BE0
  245.     m_CRC32Table(154) = &H10DA7A5A
  246.     m_CRC32Table(155) = &H67DD4ACC
  247.     m_CRC32Table(156) = &HF9B9DF6F
  248.     m_CRC32Table(157) = &H8EBEEFF9
  249.     m_CRC32Table(158) = &H17B7BE43
  250.     m_CRC32Table(159) = &H60B08ED5
  251.     m_CRC32Table(160) = &HD6D6A3E8
  252.     m_CRC32Table(161) = &HA1D1937E
  253.     m_CRC32Table(162) = &H38D8C2C4
  254.     m_CRC32Table(163) = &H4FDFF252
  255.     m_CRC32Table(164) = &HD1BB67F1
  256.     m_CRC32Table(165) = &HA6BC5767
  257.     m_CRC32Table(166) = &H3FB506DD
  258.     m_CRC32Table(167) = &H48B2364B
  259.     m_CRC32Table(168) = &HD80D2BDA
  260.     m_CRC32Table(169) = &HAF0A1B4C
  261.     m_CRC32Table(170) = &H36034AF6
  262.     m_CRC32Table(171) = &H41047A60
  263.     m_CRC32Table(172) = &HDF60EFC3
  264.     m_CRC32Table(173) = &HA867DF55
  265.     m_CRC32Table(174) = &H316E8EEF
  266.     m_CRC32Table(175) = &H4669BE79
  267.     m_CRC32Table(176) = &HCB61B38C
  268.     m_CRC32Table(177) = &HBC66831A
  269.     m_CRC32Table(178) = &H256FD2A0
  270.     m_CRC32Table(179) = &H5268E236
  271.     m_CRC32Table(180) = &HCC0C7795
  272.     m_CRC32Table(181) = &HBB0B4703
  273.     m_CRC32Table(182) = &H220216B9
  274.     m_CRC32Table(183) = &H5505262F
  275.     m_CRC32Table(184) = &HC5BA3BBE
  276.     m_CRC32Table(185) = &HB2BD0B28
  277.     m_CRC32Table(186) = &H2BB45A92
  278.     m_CRC32Table(187) = &H5CB36A04
  279.     m_CRC32Table(188) = &HC2D7FFA7
  280.     m_CRC32Table(189) = &HB5D0CF31
  281.     m_CRC32Table(190) = &H2CD99E8B
  282.     m_CRC32Table(191) = &H5BDEAE1D
  283.     m_CRC32Table(192) = &H9B64C2B0
  284.     m_CRC32Table(193) = &HEC63F226
  285.     m_CRC32Table(194) = &H756AA39C
  286.     m_CRC32Table(195) = &H26D930A
  287.     m_CRC32Table(196) = &H9C0906A9
  288.     m_CRC32Table(197) = &HEB0E363F
  289.     m_CRC32Table(198) = &H72076785
  290.     m_CRC32Table(199) = &H5005713
  291.     m_CRC32Table(200) = &H95BF4A82
  292.     m_CRC32Table(201) = &HE2B87A14
  293.     m_CRC32Table(202) = &H7BB12BAE
  294.     m_CRC32Table(203) = &HCB61B38
  295.     m_CRC32Table(204) = &H92D28E9B
  296.     m_CRC32Table(205) = &HE5D5BE0D
  297.     m_CRC32Table(206) = &H7CDCEFB7
  298.     m_CRC32Table(207) = &HBDBDF21
  299.     m_CRC32Table(208) = &H86D3D2D4
  300.     m_CRC32Table(209) = &HF1D4E242
  301.     m_CRC32Table(210) = &H68DDB3F8
  302.     m_CRC32Table(211) = &H1FDA836E
  303.     m_CRC32Table(212) = &H81BE16CD
  304.     m_CRC32Table(213) = &HF6B9265B
  305.     m_CRC32Table(214) = &H6FB077E1
  306.     m_CRC32Table(215) = &H18B74777
  307.     m_CRC32Table(216) = &H88085AE6
  308.     m_CRC32Table(217) = &HFF0F6A70
  309.     m_CRC32Table(218) = &H66063BCA
  310.     m_CRC32Table(219) = &H11010B5C
  311.     m_CRC32Table(220) = &H8F659EFF
  312.     m_CRC32Table(221) = &HF862AE69
  313.     m_CRC32Table(222) = &H616BFFD3
  314.     m_CRC32Table(223) = &H166CCF45
  315.     m_CRC32Table(224) = &HA00AE278
  316.     m_CRC32Table(225) = &HD70DD2EE
  317.     m_CRC32Table(226) = &H4E048354
  318.     m_CRC32Table(227) = &H3903B3C2
  319.     m_CRC32Table(228) = &HA7672661
  320.     m_CRC32Table(229) = &HD06016F7
  321.     m_CRC32Table(230) = &H4969474D
  322.     m_CRC32Table(231) = &H3E6E77DB
  323.     m_CRC32Table(232) = &HAED16A4A
  324.     m_CRC32Table(233) = &HD9D65ADC
  325.     m_CRC32Table(234) = &H40DF0B66
  326.     m_CRC32Table(235) = &H37D83BF0
  327.     m_CRC32Table(236) = &HA9BCAE53
  328.     m_CRC32Table(237) = &HDEBB9EC5
  329.     m_CRC32Table(238) = &H47B2CF7F
  330.     m_CRC32Table(239) = &H30B5FFE9
  331.     m_CRC32Table(240) = &HBDBDF21C
  332.     m_CRC32Table(241) = &HCABAC28A
  333.     m_CRC32Table(242) = &H53B39330
  334.     m_CRC32Table(243) = &H24B4A3A6
  335.     m_CRC32Table(244) = &HBAD03605
  336.     m_CRC32Table(245) = &HCDD70693
  337.     m_CRC32Table(246) = &H54DE5729
  338.     m_CRC32Table(247) = &H23D967BF
  339.     m_CRC32Table(248) = &HB3667A2E
  340.     m_CRC32Table(249) = &HC4614AB8
  341.     m_CRC32Table(250) = &H5D681B02
  342.     m_CRC32Table(251) = &H2A6F2B94
  343.     m_CRC32Table(252) = &HB40BBE37
  344.     m_CRC32Table(253) = &HC30C8EA1
  345.     m_CRC32Table(254) = &H5A05DF1B
  346.     m_CRC32Table(255) = &H2D02EF8D
  347.     
  348.     Const ASM As String = "5589E557565053518B45088B008B750C8B7D108B4D1431DB8A1E30C3C1E80833049F464975F28B4D088901595B585E5F89EC5DC21000"
  349.     
  350. '   Decoded ASM source from HIEW 6.86 (Hacker's View)
  351. '
  352. '   55          PUSH    BP
  353. '   89E5        MOV     BP,SP
  354. '   57          PUSH    DI
  355. '   56          PUSH    SI
  356. '   50          PUSH    AX
  357. '   53          PUSH    BX
  358. '   51          PUSH    CX
  359. '   8B4508      MOV     AX,DI[08]
  360. '   8B00        MOV     AX,BX[SI]
  361. '   8B750C      MOV     SI,DI[0C]
  362. '   8B7D10      MOV     DI,DI[10]
  363. '   8B4D14      MOV     CX,DI[14]
  364. '   31DB        XOR     BX,BX
  365. '   8A1E30C3    MOV     BL,0C330
  366. '   C1E808      SHR     AX,008    <-.
  367. '   3304        XOR     AX,[SI]     |
  368. '   9F          LAHF                |
  369. '   46          INC     SI          |
  370. '   49          DEC     CX          |
  371. '   75F2        JNE     000000018  -'
  372. '   8B4D08      MOV     CX,DI[08]
  373. '   8901        MOV     BX[DI],AX
  374. '   59          POP     CX
  375. '   5B          POP     BX
  376. '   58          POP     AX
  377. '   5E          POP     SI
  378. '   5F          POP     DI
  379. '   89EC        MOV     SP,BP
  380. '   5D          POP     BP
  381. '   C21000      RETN    00010
  382.     
  383.     ReDim m_CRC32Asmbl(0 To Len(ASM) \ 2 - 1) 'Initialize CRC32 precompiled assembly code
  384.     
  385.     For I = 1 To Len(ASM) Step 2
  386.         m_CRC32Asmbl(I \ 2) = Val("&H" & Mid$(ASM, I, 2))
  387.     Next I
  388. End Sub
  389.  
  390.  
  391.  
  392.  
  393.